/************************************
 文件明 ：  main.h
 作者   ：  胡秋峰
 描述   ：  GPIO1_IO03 相关寄存器地址定义    
 ************************************/

#include "main.h"

static void clk_enable();   /* 使能外设时钟 */
static void led_init();     /* 初始化LED0对应IO */
static void open_led();     /* 打开LED0 */
static void close_led();    /* 关闭LED0 */
static void delay_short(volatile unsigned int n);
static void delay_ms(volatile unsigned int n);/* ms延迟 */

static void clk_enable() 
{
    CCM_CCGR0 = 0xFFFFFFFF;
    CCM_CCGR1 = 0XFFFFFFFF;
    CCM_CCGR2 = 0XFFFFFFFF;
    CCM_CCGR3 = 0XFFFFFFFF;
    CCM_CCGR4 = 0XFFFFFFFF;
    CCM_CCGR5 = 0XFFFFFFFF;
    CCM_CCGR6 = 0XFFFFFFFF;
}

static void led_init()
{
    SW_MUX_GPIO1_IO03 = 0X5;/* IO 复用为GPIO1_IO03 */
    /*********************************** 
     *  2、配置GPIO1_IO03的IO属性 
     * bit 16:0 HYS关闭 
     * bit [15:14]: 00 默认下拉 
     * bit [13]: 0 kepper功能 
     * bit [12]: 1 pull/keeper使能 
     * bit [11]: 0 关闭开路输出 
     * bit [7:6]: 10 速度100Mhz 
     * bit [5:3]: 110 R0/6驱动能力 
     * bit [0]: 0 低转换率 
     ***********************************/
    SW_PAD_GPIO1_IO03 = 0X10B0;
    
    GPIO1_GDIR |= (0X1 << 3);/* GPIO01_IO03 设置为输出 */
    GPIO1_DR &= ~(0X1 << 3);/* GPIO01_IO03 输出低电平->打开LED0 */
}

static void open_led()
{
    GPIO1_DR &= ~(0X1 << 3);
}

static void close_led()
{
    GPIO1_DR |= (0X1 << 3);
}

static void delay_short(volatile unsigned int n)
{
    while(n--){}
}
/*******************************
 * 396MHZ 主频下 ms 级别延迟
 */ 
static void delay_ms(volatile unsigned int n)
{
    while (n--)
    {
        delay_short(0X7FF);
    }
}

int main(int argc, char const *argv[])
{
    clk_enable();
    led_init();

    while (1)
    {
        open_led();
        delay_ms(200);
        close_led();
        delay_ms(200);
    }
    
    return 0;
}
